//
//  TSCMyPopupMenu.m
//  Tsc_IOS
//
//  Created by Rio on 15-9-17.
//  Copyright (c) 2015年 idream. All rights reserved.
//
//

#import "TSCMyPopupMenu.h"
#import "TSCSDK.h"

#define MY_POP_MENU_MENU_ITEM_HEIGHT 50.0f

@implementation TSCMyPopupMenu {
    TSCMyDialog * _dialogMenu;
    UITableView * _tvMenu;
}

#pragma mark 公共方法

- (void) show {
    
    // 计算菜单项个数
    NSInteger menuItemNum = [self calculateMenuItemNum];
    
    // 必要检查
    
    // 将tableView作为dialog的customView
    _tvMenu = [[UITableView alloc]init];
    _tvMenu.frame = CGRectMake(0, 0, 0, MY_POP_MENU_MENU_ITEM_HEIGHT * menuItemNum); // 注：仅指定高度
    _tvMenu.rowHeight = MY_POP_MENU_MENU_ITEM_HEIGHT;
    _tvMenu.scrollEnabled = NO;
    _tvMenu.dataSource = self; // 注：代理方法的调用，拖延到show()方法开始时才进行，而不是popMenu类初始化时
    _tvMenu.delegate = self; // 注：代理方法的调用，拖延到show()方法开始时才进行，而不是popMenu类初始化时
    
    TSCLinearLayout * llCustomView = [[TSCLinearLayout alloc]init];
    llCustomView.paddingC2F = 10.0f;
    [llCustomView addSubview:_tvMenu];
    
    // 添加到MyDialog中
    _dialogMenu = [[TSCMyDialog alloc]init];
    _dialogMenu.customView = llCustomView;
    
    
    // 显示菜单
    [_dialogMenu show];
    

    
}

- (void) dismiss {
    [_dialogMenu dismiss];
}

- (BOOL) isShowing {
    return _dialogMenu.isShowing;
}

- (void) refresh {
    [_tvMenu reloadData];
}

#pragma mark 私有方法
/* private */ - (NSInteger) calculateMenuItemNum {
    NSInteger iconNum = _rowIconArray != nil ? [_rowIconArray count] : 0;
    NSInteger textNum = _rowTextArray != nil ? [_rowTextArray count] : 0;
    NSInteger result = MAX(iconNum, textNum);
    
    if (result == 0) {
        NSLog(@"[W]%s: 计算弹出菜单时发现，菜单项个数为0！可能是_rowIconArray/_rowTextArray没有正确初始化！这将导致菜单可能无法正常显示！", __FUNCTION__);
    }
    return result;
}

#pragma mark UITableView及其代理的生命周期方法

// 获得总行数
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self calculateMenuItemNum];
}

// 每一行内容是什么
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellReuseId = @"textCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellReuseId];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellReuseId];
        cell.backgroundColor = COLOR_MT_DIALOG_BG; // 注：和dialog保持一致
    }
    
    NSInteger row = indexPath.row;
    
    // 左侧图标
    if (_rowIconArray != nil && ([_rowIconArray count] -1) >= row) {
        // 以静态图片名称表示icon
        if ([_rowIconArray[row] isKindOfClass:[NSString class]] && [TSCMyUtil isStringEmpty:_rowIconArray[row]] == NO) {
            cell.imageView.image = [UIImage imageNamed:[_rowIconArray objectAtIndex:row]];
        }
        // 以UIImage表示icon
        else if ([_rowIconArray[row] isKindOfClass:[UIImage class]]) {
            cell.imageView.image = [_rowIconArray objectAtIndex:row];
        }
    }
    
    
    // 右侧文字
    if (_rowTextArray != nil && ([_rowTextArray count] -1) >= row && [TSCMyUtil isStringEmpty:[_rowTextArray objectAtIndex:row]] == NO) {
        cell.textLabel.text = [_rowTextArray objectAtIndex:row];
    }
    
    return cell;
}

// 注册事件——选择某行后
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSInteger row = indexPath.row;
    
    // 执行点击事件
    if (_rowOnClickListenerArray != nil && ([_rowOnClickListenerArray count] -1) >= row) {
        BMenuItemOnClickListener listener = _rowOnClickListenerArray[row];
        listener(indexPath);
    }
    
    // 取消选中的状态
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

@end
